local CommonOHOH = _G.CommonOHOH;
local M = CommonOHOH.class.new(script, CommonOHOH.files.BaseComponent())

local Tool=CommonOHOH.load.ShootTool()


function M.new(self,...)
	return M(self,...);
end;

function M.ctor(self, parent)
	M.super.ctor(self, parent);
    self.player=self.parent.player
    self.character=self.parent.character

    self.parent.StartAttackEvent:Connect(function(...)
        return self:SendBullet(...)
    end)

    self.bulletId=self.parent:GetBulletId()
    self.bulletSpeed=self.parent:GetBulletSpeed()
    self.isPenetrate=self.parent:IsPenetrate()

    self.Lenght=self.parent:GetBulleFlyLenght()
    self.ArrowAtt=self.parent:WaitForChild_Loop("arrow")
end;



-- 获取子弹起始位置
function M.GetBulletStartCframe(self)
    local cf= self.character:GetCFrame()
    return   cf+cf.LookVector.Unit*8
end

-- 返回的数据格式
-- {             
-- 	obj=m, --攻击目标（可以为空）
-- 	pos=mPos,--攻击位置（必须）
-- }
--寻找射击对象
function M.FindShoot(self)

    local info= self.parent:GetTagInfo()
    if info then
        return info
    end
   local cf= self:GetBulletStartCframe()
   local direction=cf.LookVector.Unit* self.Lenght 
   return {pos=cf.Position+direction}
end

-- 发射子弹
function M.SendBullet(self,...)
 local tagInfo=  self:FindShoot()
  local bullet= _G.POOL:GetObj(self.bulletId)
  self.character:SetLookAt(tagInfo.pos)

  local sendInfo=  Tool.Shoot(self:GetBulletStartCframe().Position, tagInfo.pos,bullet,self.bulletSpeed)

  if tagInfo.obj then --存在射击对象，子弹到达终点后，造成伤害
        self.parent:PushDamge(tagInfo.obj,self.player,sendInfo.arriveEvent,sendInfo)
  end

  --监听子弹被销毁事件
  sendInfo.dtorEvent:Connect(function()
        _G.POOL:PushObj(self.bulletId,bullet)
  end)

 --将伤害同步到服务器
  self.parent:Syn2Server(tagInfo,sendInfo)
end

function M.dtor(self)
	M.super.dtor(self);
end;



return M